package com.elite.groovy.callback

import cn.com.khproc.TPXMLToJson
import cn.com.khproc.jsonCallProcedure
import cn.com.tpUtil.GetXMLValue
import com.elite.groovy.util.EliteBean
import org.apache.commons.logging.Log
import org.apache.commons.logging.LogFactory
import org.json.JSONObject

import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse

public class TpAntGoldSuitList implements ServiceBackInvoke{
	private static final Log log=LogFactory.getLog(TpAntGoldSuitList.class);
	public String doCallBack(EliteBean eliteBean, HttpServletRequest request, HttpServletResponse response) {

		response.setCharacterEncoding("UTF-8");

		String getMethod = request.getMethod();
		log.debug("getMethod:" + getMethod);

		String inData = "";
		String outData = "";
		String dataSourceID = "dataSource";
		String inRequestType = "";
		String SyncJson="";
		String tFlag="";
		
		BufferedReader iny = null;
		if (getMethod.equals("GET")) {
			inData = request.getParameter("data");
			log.debug("原始Get请求参数:" + inData);
		} else {
			InputStreamReader reader = new InputStreamReader(request.getInputStream(), "UTF-8");
			iny = new BufferedReader(reader);
			String line;
			while ((line = iny.readLine()) != null) {
				inData += line;
			}
			log.debug("原始Post请求参数:" + inData);
		}

		try {
			// 解析接口处理类型
			inRequestType = GetXMLValue.readStringXml(inData, "REQUEST_TYPE");
			//报价单状态回写电销系统
			if(inRequestType=="A1")
			{

				// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BASE_PART", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);

			}
			//转介绍信息提交到电销系统
			else if(inRequestType=="A2")
			{

				// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BASE_PART", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);

			}
			//投保单信息回写电销系统
			else if(inRequestType=="A3")
			{

				// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BASE_PART", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);

			}
			//蚂蚁名单推送
			else if(inRequestType=="WDMYMD")
				{
	
					// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
					SyncJson = TPXMLToJson.toJson(inRequestType, "BODY", inData);
	
					// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
					outData = jsonCallProcedure.doService(SyncJson);
		
				}
			//蚂蚁名单支付状态回写
			else if(inRequestType=="ZFQR")
			{

				// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BODY", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);

			}
			//蚂蚁名单承保状态回写
			else if(inRequestType=="CBQR")
			{

				// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BODY", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);

			}
			//与太平IT核实此功能暂未使用，蚂蚁名单投保查询接口
			else if(inRequestType=="TBCX")
			{

				// 将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BODY", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);

			}
			//网销网电名单推送
			else if(inRequestType=="W2")
			{

				//将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BASE_PART", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);
				
			}
			//网销系统往电销系统回写收费信息
			else if(inRequestType=="W3")
			{

				//将第三方系统的XML报文中的BODY内容加上接口类型直接转为JSON
				SyncJson = TPXMLToJson.toJson(inRequestType, "BASE_PART", inData);

				// 将JSON直接调用jsonCallProcedure方法完成JSON到存储过程的调用并接收返回JSON字符串
				outData = jsonCallProcedure.doService(SyncJson);
				
			}
			else
			{
			    tFlag="1";
				outData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><PACKET TYPE=\"REQUEST\" VERSION=\"1.0\"><HEAD><REQUEST_TYPE>"+inRequestType+"</REQUEST_TYPE><RESPONSE_CODE>0</RESPONSE_CODE><ERROR_MESSAGE>未知的数据接口类型</ERROR_MESSAGE></HEAD></PACKET>";
			}
			
			if(tFlag!="1"){
			  JSONObject jsonObject = new JSONObject(outData);
		      outData=GetJV(jsonObject.get("data"), "outstring");
			}
			//log.debug("调用并接收返回JSON字符串Result_Json:" + outData);
			log.debug("处理"+inRequestType+"接口成功并返回JSON字符串Result_Json:" + outData);
			return outData;
		}
		catch(Exception e) {
			log.error("接口处理异常"+e.getMessage());
			outData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><PACKET TYPE=\"REQUEST\" VERSION=\"1.0\"><HEAD><REQUEST_TYPE>"+inRequestType+"</REQUEST_TYPE><RESPONSE_CODE>0</RESPONSE_CODE><ERROR_MESSAGE>"+e.getMessage()+"</ERROR_MESSAGE></HEAD></PACKET>";
			log.debug("处理失败返回XML:" + outData);
			return outData;
		}
	}

	// 解析Json值
	public static String GetJV(JSONObject inJson, String getKey) {
		String Rev_Value = null;
		try {
			Rev_Value = inJson.getString(getKey);
		} catch (Exception e) {
			try {
				Rev_Value = String.valueOf(inJson.getInt(getKey));
			} catch (Exception e1) {
				try {
					Rev_Value = String.valueOf(inJson.getJSONArray(getKey));
				} catch (Exception e2) {
					try {
						Rev_Value = String.valueOf(inJson.getJSONObject(getKey));
					} catch (Exception e3) {

						try {
							Rev_Value = String.valueOf(inJson.getBoolean(getKey));
						} catch (Exception e4) {
							Rev_Value = "";
						}
					}
				}
			}
		} finally {
			if (Rev_Value == null || Rev_Value.equals("null") || Rev_Value.length() <= 0) {
				Rev_Value = "";
			} else {
			}
		}
		return Rev_Value;
	}
}
